#ifndef PING_TASK_H
#define PING_TASK_H

#include "esp_err.h"
#include "esp_netif.h"
#include "esp_eth.h"

#ifdef __cplusplus
extern "C" {
#endif

// 默认配置
#define PING_TASK_DEFAULT_POLL_INTERVAL_MS  3000   // 轮询间隔5000ms
#define PING_TASK_DEFAULT_PING_INTERVAL_MS  2000  // ping间隔2秒
#define PING_TASK_DEFAULT_PING_TIMEOUT_MS   2000  // ping超时2秒
#define PING_TASK_DEFAULT_TIMEOUT_THRESHOLD 3     // 连续3次超时触发恢复
#define PING_TASK_DEFAULT_TASK_STACK_SIZE   4096  // 任务栈大小
#define PING_TASK_DEFAULT_TASK_PRIORITY     (tskIDLE_PRIORITY + 2) // 任务优先级

// ping任务配置
typedef struct {
    uint32_t poll_interval_ms;   // IP状态轮询间隔（ms）
    uint32_t ping_interval_ms;   // ping请求间隔（ms）
    uint32_t ping_timeout_ms;    // ping超时时间（ms）
    uint32_t timeout_threshold;  // 连续超时次数阈值
    uint32_t task_stack_size;    // 任务栈大小（字节）
    UBaseType_t task_priority;   // 任务优先级
    bool enable_link_check;      // 是否启用链路状态检查
    esp_eth_handle_t eth_handle; // 以太网句柄（用于链路检查）
    const char *backup_ping_target; // 备用ping目标（例如，"8.8.8.8"）
} ping_task_config_t;

// 初始化默认配置
void ping_task_config_default(ping_task_config_t *config);

// 启动ping任务
esp_err_t ping_task_start(esp_netif_t *netif, const ping_task_config_t *config);

// 停止ping任务
esp_err_t ping_task_stop(void);

// 检查ping任务是否运行
bool ping_task_is_running(void);

#ifdef __cplusplus
}
#endif

#endif // PING_TASK_H